#include "thread.hpp"
#include <unistd.h>
#include <vector>
using namespace The_Thread;
int sta = 10000;
void running(ThreadDate* td){
       while(true)
        {
            LockGuard(td->_td);
            if(sta > 0)
            {
                usleep(1000);
                std::cout << "thread: " << td->_name  << " " << sta << std::endl;
                sta--;
            }
            else
            {    
                break;
            }
        }
       
       
       
       
       
       
        // while(true)
        // {
        //     pthread_mutex_lock(td->_td);
        //     if(sta > 0)
        //     {
        //         std::cout << "thread: " << td->_name  << " " << sta-- << std::endl;
        //         pthread_mutex_unlock(td->_td);
        //     }
        //     else
        //     {    
        //         pthread_mutex_unlock(td->_td);
        //         break;
        //     }
        // }
        // std::cout << name << " is Running!!!" << std::endl;
        // sleep(1);
}
int main()
{
    pthread_mutex_t td;
    pthread_mutex_init(&td, nullptr);
    std::vector<Thread> threads;
    for(int i = 1; i <= 4 ; i++)
    {
        std::string name = "thread_" + std::to_string(i);
        ThreadDate* ttd = new ThreadDate(name, &td);
        threads.emplace_back(name, running, ttd);
    }
    for(auto& e : threads)
    {
        e.Start();
    }
    for(auto& e : threads)
    {
        e.Join();
        std::cout << e.GetThreaDate()->_name << std::endl;
    }
    pthread_mutex_destroy(&td);



    // std::vector<Thread> cur;
    // for(int i = 1; i <= 10; i++)
    // {
    //     int a = i;
    //     std::string str = "Thread_" + std::to_string(a);
    //     cur.emplace_back(str, running);
    //     sleep(1);
    // }
    // for(auto& e : cur)
    // {
    //     e.Start();
    // }
    // sleep(5);
    // for(auto& e : cur)
    // {
    //     e.Stop();
    // }
    // sleep(2);
    // for(auto& e :cur)
    // {
    //     e.Join();
    // }
    // return 0;
}